package utils

import (
	"fmt"
	"github.com/bwmarrin/snowflake"
	"log"
)

// SnowflakeIDGenerator 结构体用于生成雪花 ID
type SnowflakeIDGenerator struct {
	node *snowflake.Node
}

// NewSnowflakeIDGenerator 创建一个新的 SnowflakeIDGenerator 实例
func NewSnowflakeIDGenerator(nodeID int64) (*SnowflakeIDGenerator, error) {
	// 初始化雪花节点
	node, err := snowflake.NewNode(nodeID)
	if err != nil {
		return nil, err
	}
	return &SnowflakeIDGenerator{node: node}, nil
}

// GenerateID 生成一个新的雪花 ID
func (s *SnowflakeIDGenerator) GenerateID() snowflake.ID {
	return s.node.Generate()
}

// PrintID 打印一个雪花 ID
func (s *SnowflakeIDGenerator) PrintID() {
	id := s.GenerateID()
	fmt.Println("Generated Snowflake ID:", id.String())
}

func main() {
	// 创建一个新的 SnowflakeIDGenerator 实例，nodeID 通常是 0-1023 之间的值
	gen, err := NewSnowflakeIDGenerator(1)
	if err != nil {
		log.Fatalf("Failed to create SnowflakeIDGenerator: %v", err)
	}

	// 生成并打印一个雪花 ID
	gen.PrintID()
}
